#!/bin/bash
# Mon script d'installation automatique de VPS/OpenVpn/VNC4SERVER/Xorg/Webmin
#
# Crackeyes.1 - 05/2011
# GPL
#
# Syntaxe: # su  "./VPSautoinstall.sh"
# Syntaxe: or # sudo ./VPSautoinstall.sh
VERSION="1.2.20"
 
##############################
# Version de  a installer
 
##############################
# Debut de l'installation
##############################

##############################
# Fonction Affichage des entêtes
##############################
printHDR()
{
	echo ""
        echo "-----------------------------------------"
        echo $1
        echo "-----------------------------------------"
}

##############################
# Fonction permettant de checker si le fichier passe en parametre existe ou pas
##############################
checkExistFile()
{
if [ -r $1 ] ;then
	return 0;
else
	return 1;
fi
}

##############################
# Fonction Passage en parametre d'une question au choix o/n comme reponse
##############################
ouinon()
{
    rep='n'
     while true
     do
         echo -n "$* ?"
         read rep 
	 [[ $rep = "" ]] && rep='n' 
 
         case $rep in
             [oO] | [oO][uU][iI] )  return 0;;
             [nN] | [nN][oO][nN] )  return 1;;
             *) echo "Mauvaise réponse"
         esac
     done
}

##############################
# Fonction D installation des paquets necessaires au serveur
##############################
gestion_apt_paquet()
{
if  ! which $1>/dev/null
then
 if ouinon "Voulez vous installer le paquet : " $1 " (o/n)  $2 :" 
#if ouinon "Voulez vous installer le paquet : " $1 " (o/n) "
then
	if verbose
	then
#		echo 'verbose activé'
		sudo apt-get  -y   install $1
#		echo "decommenter la ligne 70 et 73 pour réactiver l'installation des paquets"
	else
#		echo 'verbose desactivé'
#               echo "decommenter la ligne 70 et 73 pour réactiver l'installation des paquets"
		sudo apt-get -qq -y  install $1	
	fi
return 0
else
return 1
fi
fi
}

gestion_apt_paquet_remove()
{
if  ! which $1>/dev/null
then

if ouinon "Voulez vous désinstaller le paquet : " $1"  o/n $2 "
then
        if verbose
        then
#                       echo 'verbose activé'
        sudo apt-get -qq -y   remove $1
        else
#                       echo 'verbose desactivé'
        sudo apt-get  -y  remove  $1
        fi
fi
fi
}


##############################
# Fonction d initialisation des variables du script 
##############################
init_script()
{
clear

# -1-  Test que le script est lance en root
##############################
if [ $EUID -ne 0 ]; then
#       echo "Le script doit être lancé en root: # sudo $USER" 1>&2
        echo "Fuck! Le script doit être lancé en root: # sudo $USER" 1>&2
	exit 1
fi

#Paquet necessaire pour récupérer l'adresse ip du serveur a configurer
#if checkExistFile "/usr/bin/curl"
#then
TIME_START_SCRIPT=$(date '+%A-%d (%Hh:%Mm:%Ss)')
echo Script start @ $TIME_START_SCRIPT 
#else
gestion_apt_paquet "curl" "(Paquet necessaire pour récupérer l'adresse ip public du serveur à configurer)"
#fi

NAME_SERVER=$(uname -n)
IP_SERVER=$(curl -s http://www.sputnick-area.net/ip.php)
ENCRYPT=1024

echo "#######################################################"
echo "!!!!!!!!!!~~~~ LANCEMENT VPSautoinstall V1.0 ~~~~~~!!!!"
echo "#######################################################"
echo ""

printHDR "Initialisation du script"
echo "-----------------------------------------"

VERBOSEMODE=1
if  ouinon "Voulez-vous activer le mode verbose ? (o/n)"
then
	VERBOSEMODE=0
else
	VERBOSEMODE=1
fi

#echo -n  "Merci de renseigner l'adresse ip de votre serveur :($IP_SERVER) : " 
#read rep
#[[ $rep = "" ]] && rep=$IP_SERVER
#IP_SERVER=$rep

#echo -n "Quel est le nom de votre serveur ? ($NAME_SERVER) : "
#read rep
#[[ $rep = "" ]] && rep=$NAME_SERVER
#NAME_SERVER=$rep

#if  ouinon "Voulez-vous creer un utilisation admin pour openvpn  ? (o/n) : "
#then
#	MULTI_USER_OPENVPN=0
#else
#	MULTI_USER_OPENVPN=1
#fi
}

##############################
# Fonction retournant l etat de la variable VERBOSE 
##############################
verbose()
{
#echo VERBOSEMODE= $VERBOSEMODE
return $VERBOSEMODE
}

##############################
# Fonction MAIN du script d autoinstall 
##############################
function MAIN()
{
##############################
# -0- Initialisation du VPS
##############################
#	if [$VERBOSEMODE -e 0]
init_script

printHDR "Etape 0/X Gestion de l'atp-get"

if ouinon "Voulez-vous faire une maj d'apt-get ? (o/n) "
then
	if verbose
	then
#			echo 'verbose activé'
	sudo apt-get  -y   update
	else
#			echo 'verbose desactivé'
	sudo apt-get -qq -y  update
	fi
fi
##############################
# -2- Fichier de configuration a modifier pour activer l auto completation
##############################

## echo '--activation/desactivation de l auto completation'

       BASHRC="/root/.bashrc"
       BASHRC2="/etc/bash.bashrc"

       # recuperer ligne de configuration
       BASHRCLine=`cat $BASHRC | grep "# enable bash completion in interactive shells"`
       BASHRCLine2=`cat $BASHRC2 | grep "# enable bash completion in interactive shells"`

       # numero de la première ligne a modifier
       BASHRCLineNumber=`grep -n "if \[ -f \/etc\/bash_completion \] \&\& ! shopt -oq posix; then" $BASHRC | awk -F ":" '{print $1}'`
       BASHRCLineNumber2=`grep -n "if \[ -f \/etc\/bash_completion \] \&\& ! shopt -oq posix; then" $BASHRC2 | awk -F ":" '{print $1}'`

	printHDR "Etape 1/X Configuration auto completation"
	
	if ouinon "Voulez-vous activer l'auto completation (o/n)"
	then

#       	Check des fichiers manquants
        	gestion_apt_paquet "sed" "(ATTENTION ce paquet n'est pas présent sur votre distribution, MAIS est n'écessaire pour activer l'auto completation!!! ) "
        	gestion_apt_paquet "bash-completion"

		#Activation de l'auto completation
                sed -i ''$BASHRCLineNumber',+2 s/^#//g' $BASHRC
                sed -i ''$BASHRCLineNumber2',+2 s/^#//g' $BASHRC2
	else
		#Desactivation de l'auto completation
		sed -i ''$BASHRCLineNumber',+2 s/^/#/g' $BASHRC
		sed -i ''$BASHRCLineNumber2',+2 s/^/#/g' $BASHRC2
	fi
	source $BASHRC
	source $BASHRC2
# Fin de l'activation/desactivation de l'auto completation

##############################
# -3- Gestion des paquets apt
##############################
printHDR "Etape 2/X Installation des paquets"
gestion_apt_paquet "vim"
gestion_apt_paquet "locate"
gestion_apt_paquet "ubuntu-desktop gdm vnc4server"
# Pour Webmin il faut modifier le /etc/apt/source.list
#gestion_apt_paquet "webmin"
if  gestion_apt_paquet "openvpn" 
then
#echo 'ok pour install openvpn'
#sleep 1
install_openvpn=1
else
install_openvpn=0
#echo 'KO!!!! pour install openvpn'
fi
#gestion_apt_paquet "openvpn"
gestion_apt_paquet "transmission-daemon"
gestion_apt_paquet "iptables"
gestion_apt_paquet "fail2ban"

##############################
# -4- Degraissage de apreS INStallation gdm
##############################
printHDR "Etape 3/X Desinstallation  des paquets"
gestion_apt_paquet_remove "gadmin-openvpn-server"
gestion_apt_paquet_remove "wpa_supplicant"
gestion_apt_paquet_remove "modemmanager"
gestion_apt_paquet_remove "cups"
gestion_apt_paquet_remove "network-manager"

##############################
# -5- parametrage d openvpn
##############################
#si  openvpn est installe alors :
#echo "debug install_openvpn= " $install_openvpn
if [[ $install_openvpn = 1 ]];
then
	printHDR "Etape 4/X parametrage d openvpn"
#	echo $NAME_SERVER $IP_SERVER  'root' $ENCRYPT

	echo -n  "Merci de renseigner l'adresse ip de votre serveur :($IP_SERVER) : " 
	read rep
	[[ $rep = "" ]] && rep=$IP_SERVER
	IP_SERVER=$rep

	echo -n "Quel est le nom de votre serveur ? ($NAME_SERVER) : "
	read rep
	[[ $rep = "" ]] && rep=$NAME_SERVER
	NAME_SERVER=$rep

        echo -n "Quel degrés de cryptage voulez vous (1024,2048,4096)" \n
	echo "(Attention plus le cryptage est élevé plus longue sera la génération des clés) ?  ($ENCRYPT) : "
        read rep
        [[ $rep = "" ]] && rep=$ENCRYPT
        ENCRYPT=$rep

	echo $NAME_SERVER $IP_SERVER  'root' $ENCRYPT
#	sleep 5
	sh config_openvpn.sh $NAME_SERVER $IP_SERVER  'root' $ENCRYPT

fi
#si non
#on ne fait rien !

##############################
# -6- Creation de client openvpn 
##############################
if [[ $install_openvpn = 1 ]];
then
echo ""
echo ""
echo "Veuillez entrer le nom du client que vous voulez créer : "
read rep
sh ovcreateclient.sh $rep  $IP_SERVER
fi
##############################
# -7- Activation desactivation des  log sur openvpn
##############################

##############################
# -8- Parametrage de transmission 
##############################
}

##############################
# -X- Fin du déploiement de votre VPS 
##############################
MAIN
echo "bye bye"
exit
